package com.gsdl.web.controller;

import java.io.Serializable;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import javax.servlet.http.HttpSession;

import org.apache.log4j.Logger;

import com.gsdl.model.bo.UtilizadorBO;
import com.gsdl.model.delegate.BusinessDelegate;
import com.gsdl.model.entity.Utilizador;
import com.gsdl.model.entity.Utilizador.PerfilUtilizador;
import com.gsdl.web.util.JsfUtil;


// TODO: Auto-generated Javadoc
/**
 * The Class LoginController.
 *
 * @author Natacha Antonopoulos
 */

@ManagedBean
@SessionScoped
public class LoginController implements Serializable{
	
    /** The Constant serialVersionUID. */
    private static final long serialVersionUID = 1L;
    
    /** The Constant LOG. */
    private static final Logger LOG = Logger.getLogger(LoginController.class.getName());

    /** The user name. */
    private String userName = "admin";
    
    /** The password. */
    private String password = "1234";

    /** The utilizador. */
    private Utilizador utilizador;

    /** The Constant USER_SESSION_KEY. */
    public static final String USER_SESSION_KEY = "utilizador";
    
    /**
     * Login action.
     *
     * @return the string
     */
    public String loginAction(){
    	try{
    		
	        FacesContext context = FacesContext.getCurrentInstance();
	        utilizador = BusinessDelegate.getInstance().login(userName, password);
	       
	        
	        if(utilizador == null){
	        	JsfUtil.addErrorMessage("Usename/Password invalidos");
	        }else{
	          context.getExternalContext().getSessionMap().put(USER_SESSION_KEY, utilizador);
	          LOG.info(userName+" Login");
	          return "home";
	        }
	        
	        
    	}catch(Exception ex){
    		JsfUtil.addErrorMessage(ex.getMessage());
    	}
    	LOG.info(userName+" Login Fail");
    	return "";
    }

    /**
     * Logout action.
     *
     * @return the string
     */
    public String logoutAction() {
        try {
            FacesContext ctx = FacesContext.getCurrentInstance();
            HttpSession session = (HttpSession) ctx.getExternalContext().getSession(false);
            session.setAttribute(USER_SESSION_KEY, null);
            session.invalidate();
        } catch (Exception e) {
        }
        return "index";
    }
	
    
    /**
     * Checks if is administrador.
     *
     * @return true, if is administrador
     */
    public boolean isAdministrador(){
    	return utilizador.getPerfilUtilizador().equals(PerfilUtilizador.ADMINISTRADOR);
	}
    
    /**
     * Checks if is responsavel.
     *
     * @return true, if is responsavel
     */
    public boolean isResponsavel(){
    	return utilizador.getPerfilUtilizador().equals(PerfilUtilizador.RESPONSAVEL);
	}
    
    /**
     * Checks if is operador.
     *
     * @return true, if is operador
     */
    public boolean isOperador(){
    	System.out.println("**** isOperador: "+utilizador.getPerfilUtilizador()+": "+utilizador.getPerfilUtilizador().equals(PerfilUtilizador.OPERADOR));
    	return utilizador.getPerfilUtilizador().equals(PerfilUtilizador.OPERADOR);
	}
	
	/**
	 * Gets the user name.
	 *
	 * @return the userName
	 */
	public String getUserName() {
		return userName;
	}
	
	/**
	 * Sets the user name.
	 *
	 * @param userName the userName to set
	 */
	public void setUserName(String userName) {
		this.userName = userName;
	}
	
	/**
	 * Gets the password.
	 *
	 * @return the password
	 */
	public String getPassword() {
		return password;
	}
	
	/**
	 * Sets the password.
	 *
	 * @param password the password to set
	 */
	public void setPassword(String password) {
		this.password = password;
	}

	/**
	 * Gets the utilizador.
	 *
	 * @return the utilizador
	 */
	public Utilizador getUtilizador() {
		return utilizador;
	}

	/**
	 * Sets the utilizador.
	 *
	 * @param utilizador the utilizador to set
	 */
	public void setUtilizador(Utilizador utilizador) {
		this.utilizador = utilizador;
	}
        
        
   
}
